---
title: ExportServices
summary: API reference for ExportServices.
status: draft
owner: <owner>
last_reviewed: 2026-08-21
library: SAIF.Services.Export
reference_type: embedded
---

# ExportServices

`ExportServices` is the sole component of `SAIF.Services.Export` and provides the library's entire export-formatting capability: turning any in-memory collection of objects into delimited (CSV-style) text without any knowledge of the specific business entity being exported. It is consumed directly by the `Legal` front-end web application to render query/business-result collections as downloadable text.*

## Purpose
- Owns the responsibility of formatting an arbitrary `IEnumerable(Of T)` collection as delimited text, using reflection (`System.ComponentModel.TypeDescriptor`) to discover the shape of `T` at runtime rather than requiring a statically declared mapping.
- Provides the caller (a Legal web page or code-behind) with configurable delimiter and quoting behavior so the same method can serve differing export-format needs.*

## Context
- Namespace: `SAIF.Services.Export`
- Assembly/package: `SAIF.Services.Export` (embedded .NET Framework 4.6.2 class library, referenced directly by `Legal.vbproj`)

## Public members
| Member | Signature | Purpose |
| --- | --- | --- |
| `GetCSV(Of T)` | `Public Shared Function GetCSV(Of T)(ByVal inColl As IEnumerable(Of T), Optional ByVal Delimiter As String = ",", Optional ByVal UseQuotes As Boolean = True) As String` | Builds and returns a delimited text representation (header row plus one data row per item) of the supplied collection, discovering `T`'s public properties via reflection; returns an empty string when the collection is empty, and silently omits null property values from a row rather than emitting an empty placeholder.* |

## Behavioral notes
- The method is `Shared` (static) and stateless — it holds no instance state between calls.
- Property discovery is performed twice: once against the first item (for the header row) and once per item during row construction, via `TypeDescriptor.GetProperties`/`PropertyDescriptorCollection`.*
- Null property values are silently skipped during row construction rather than emitted as empty placeholders, which can misalign column counts across data rows when null values occur mid-row.*
- No business-rule enforcement, validation, or database access occurs inside this type; formatting is purely mechanical and delimiter/quote-driven.

## Constraints and usage notes
- Callers must supply a homogeneous collection whose item type `T` exposes stable public properties, since the header row is derived only from the first item.*
- The method offers no mechanism to preserve column alignment when null values occur mid-row; callers relying on fixed-width column output should be aware of this limitation.*
- No exception handling is present in the method; reflection or `ToString()` failures on individual property values would propagate to the caller.**

> **Note:** Statements marked with * were inferred from code structure, naming conventions, or
> contextual evidence where direct confirmation was not available in source artifacts. Statements
> marked with ** could not be confirmed; treat as unknown until verified.

## Sources
- `SAIF.Services.Export\ExportServices.vb`
- `.saifdocgen\state\runs\20260821-113120-claims-bof-web-legal\analysis\TSK009-analysis.md`
